﻿using System;
using System.Collections.Generic;
using Sustainalytics.ClientDW.Entities;
using Sustainalytics.Entities;
using Sustainalytics.Entities.ESGRatings;
using Sustainalytics.ESG.Entities;
using IndicatorTemplate = Sustainalytics.ESG.Entities.IndicatorTemplate;
using RPControversyIndicator = Sustainalytics.ESG.Entities.RPControversyIndicator;
using RPIndicatorExtended = Sustainalytics.ESG.Entities.RPIndicatorExtended;
using Source = Sustainalytics.ESG.Entities.Source;

namespace Sustainalytics.ReportGenerator.BL
{
    // all we need for company report offline

    public class CompanyReportDataOffline
    {
        public ReportType ReportType { get; set; }
        
        public ESGProfile ESGProfile { get; set; }
        
        public Guid CompanyId { get; set; }


        public CorporateData CorporateData { get; set; }
        public FinancialData FinancialData { get; set; }

        public RPCompanyProfile CompanyProfile { get; set; }

        public OverallPerformance OverallPerformance { get; set; }
        public List<CompanyScore> IndustryTopPerformers { get; set; }
        public List<CompanyScore> IndustryPeers { get; set; }

        //todo:rocket team refactor, view on Online Report Entities EsgOverallPerformanceSummary
        public double IndustryPeersMinCapitalization { get; set; }
        public double IndustryPeersMaxCapitalization { get; set; }

        public List<CompanyHistoryData> CompanyHistoricalPerformance { get; set; }

        public List<SubPeerGroupKeyEsgIssue> SubPeerGroupKeyEsgIssues { get; set; }
        public List<KeyEsgIssue> KeyEsgIssues { get; set; }
        
        public Analyst Analyst { get; set; }
        public string AnalystCommentary { get; set; }

        public IList<IndicatorTemplate> IndicatorTemplates { get; set; }

        public List<ThemePerformance> ThemesPerformance { get; set; }
        public List<RPIndicatorExtended> StandardIndicators { get; set; }
        public List<RPIndicatorPerformance> RPComputationIndicators { get; set; }
        public List<RPControversyIndicator> ControversyIndicators { get; set; }
        public List<EventIndicator> EventIndicators { get; set; }
        public List<Incident> Incidents { get; set; }
        public List<ComparisonGroupControversy> ComparisonGroupControversies { get; set; }

        public List<Source> Sources { get; set; }
    }
}
